/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package xml_pac;

import bean.Coordonne;
import bean.Ilot;
import bean.Parcelle;
import bean.Personne;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 *
 * @author romain_lou
 */
public class ParcelleHandler extends DefaultHandler{
	//résultats de notre parsing
	private List<Parcelle> listeParcelle;
        private List<Ilot> listeIlot;
	private Parcelle parcelle;
        private Ilot ilot;
	//flags nous indiquant la position du parseur
	private boolean inIlot, inRpg, inParcelles, inParcelle;
	//buffer nous permettant de récupérer les données
	private StringBuffer buffer;
        private Personne personne;

        String chaine;

	// simple constructeur
	public ParcelleHandler(Personne p){
		super();
                this.personne = p;
	}
	//détection d'ouverture de balise
	public void startElement(String uri, String localName,
			String qName, Attributes attributes) throws SAXException{
		if(qName.equals("rpg")){
			listeParcelle = new ArrayList<Parcelle>();
                        listeIlot = new ArrayList<Ilot>();
                        inRpg = true;
			
		}
                else if(qName.equals("ilot")){
                    ilot = new Ilot();
                    ilot.setPersonne(personne);
                    ilot.setNumIlot(Integer.parseInt(attributes.getValue("numero-ilot")));
                    inIlot = true;
                }else if(qName.equals("parcelles")){
                    inParcelles = true;
                }else if(qName.equals("parcelle")){
                    parcelle = new Parcelle();
                    inParcelle = true;
                }else if(qName.equals("culture")){
                    parcelle.setCulture(attributes.getValue("code-culture"));
                }else if(qName.equals("adresse-exploitation")){
                    //inAdrExploit = true;
                }


                else {
			buffer = new StringBuffer();
		}
	}
	//détection fin de balise
	public void endElement(String uri, String localName, String qName)
			throws SAXException{
		if(qName.equals("parcelle")){

                    ilot.getListeParcelle().add(parcelle);
                    parcelle = null;

		}if(qName.equals("ilot")){
                    parcelle = null;
                    listeIlot.add(ilot);
                    ilot = null;

		}else if(qName.equals("surface-declaree")){

                    parcelle.setSurface(Double.parseDouble(buffer.toString()));

		}else if(qName.equals("gml:coordinates")){

                    if (ilot != null && parcelle == null && ilot.getListeParcelle().size()==0){
                        chaine = buffer.toString();
                        chaine = chaine.replaceAll("[\r\n]+", "");
                        String tabCoordonnes[] = chaine.split(" ");
                        Coordonne c;
                        for(int i=0; i<tabCoordonnes.length; i++){
                            if(tabCoordonnes[i] != ""){
                                String tabCoordonne[] = tabCoordonnes[i].split(",");
                                if(tabCoordonne.length == 2){
                                c = new Coordonne(Double.parseDouble(tabCoordonne[0]), Double.parseDouble(tabCoordonne[1]));
                                ilot.getListeCoordonnee().add(c);
                                }
                           }
                        }
                    }
		}
                if(parcelle!=null)
                    listeParcelle.add(parcelle);
	}
	//détection de caractères
	public void characters(char[] ch,int start, int length)
			throws SAXException{
		String lecture = new String(ch,start,length);
		if(buffer != null) buffer.append(lecture);
	}
	//début du parsing
	public void startDocument() throws SAXException {
	}
	//fin du parsing
	public void endDocument() throws SAXException {
                utilitaire.Log.getLog().ecrireSansTerminal("Fin du parsing");

                for (Ilot ilot : listeIlot){
                    ilot.save();
                }
	}
}
